package com.lvmama.service.system;

import com.lvmama.common.exception.BizException;
import com.lvmama.common.result.Result;
import com.lvmama.pojo.base.Page;
import com.lvmama.pojo.base.ResultBase;
import com.lvmama.pojo.dto.rhino.system.UserDTO;
import com.lvmama.pojo.dto.rhino.system.UserQueryDTO;
import com.lvmama.pojo.entity.rhino.system.User;

import java.util.List;

public interface UserService {
    /**
     * 查询用户
     *
     * @param query 查询条件
     * @return 结果集
     */
    Result<List<User>> queryUserList(UserQueryDTO query) ;

    /**
     * 查询用户分页
     *
     * @param query 查询条件
     * @return 分页
     */
    Result<Page<User>> queryUserPage(UserQueryDTO query) ;

    /**
     * 通过id查询单个用户
     *
     * @param id id
     * @return 用户对象
     */
    Result<User> queryUserById(String id) ;

    /**
     * 更新用户
     *
     * @param userDTO 数据传输对象
     * @return 影响的行数
     */
    Result<Integer> updateUserByUserDTO(UserDTO userDTO) ;

    /**
     * 保存用户
     *
     * @param userDTO 数据传输对象
     * @return 影响的行数
     */
    Result<Integer> saveUserByUserDTO(UserDTO userDTO) ;

    /**
     * 通过id删除用户
     *
     * @param id id
     * @return 影响行数
     */
    Result<Boolean> deleteUserById(String id) ;

    /**
     * 通过id停用、启用用户
     *
     * @param id id
     * @return 影响行数
     */
    Result<Integer> enableUserById(String id) ;

    /**
     * 根据id查询用户的角色
     *
     * @param id id
     * @return 用户
     */
    Result<User> queryUserRoleById(String id);

    /**
     * 通过username查询单个用户及所有角色
     *
     * @param username username
     * @return 用户对象
     * @throws BizException 业务异常
     */
    ResultBase<User> queryUserAndRolesByUsername(String username) throws BizException;

    /**
     * 更新用户登录时间
     *
     * @param userId 用户id
     * @return 影响行数
     */
    Result<Integer> updateUserOperateDateByUserId(String userId) ;
}
